package collection;

import java.util.ArrayList;
import java.util.List;

/**
 * List集合
 * java.util.List接口，线性表。是可以存放重复元素且有序的集合。
 * 常见实现类:
 * java.util.ArrayList:内部使用数组实现，查询性能更好。
 * java.util.LinkedList:内部使用链表实现，增删性能更好，首尾增删性能最佳
 * 实际开发中对性能没有特别苛刻的情况下，通常使用ArrayList.
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("five");
        System.out.println(list);
        /*
            List集合提供了一套通过下标操作元素的方法
            E get(int index)
            获取指定下标处对应的元素
            E set(int index,E e)
            将给定的元素e存入下标index处，返回值为该位置原有的元素。
            替换元素操作
         */
        //获取第三个元素
        String str = list.get(2);
        System.out.println(str);
        //由于可以通过下标获取元素，因此普通for循环可以遍历List集合元素
        for (int i=0;i<list.size();i++){
            str = list.get(i);
            System.out.println(str);
        }

        System.out.println(list);//[one, two, three, four, five]
//        [one, two, six, four, five]
        String old = list.set(2,"six");
        System.out.println(list);//[one, two, six, four, five]
        System.out.println(old);

        /*
            在不创建新集合的前提下，将集合list元素反转
            思路:正数位置的元素和倒数位置元素交换
         */
//        Collections.reverse(list);

        for(int i=0;i<list.size()/2;i++){
            //获取正数位置上的元素
            String s = list.get(i);//one
            //正数位置上的元素设置到倒数位置上
            s = list.set(list.size()-1-i,s);//返回值就是对应的倒数位置的元素
            //将倒数位置的元素设置到正数位置上
            list.set(i,s);
        }
        System.out.println(list);//[five, four, six, two, one]

    }
}






